/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modulos.paciente.modelo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import modelo.Persona;
import modulos.certificado.modelo.Certificado;
import modulos.consulta.modelo.Consulta;
import modulos.consulta.oftalmologia.modelo.RecetaOftalmologia;
import modulos.reservacion.modelo.Reservacion;

/**
 *
 * @author Edulima
 */
@Entity
public class Paciente extends Persona implements Serializable {

    @Column(unique = true)
    private String cedula;
    @Column(updatable= false, unique=true)
    private String numeroHC;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date fechaNace;
    private String lugarNace;
    private String lugarResi;
    private String genero;
    private String tSangre;
    private String raza;
    private String eCivil;
    private String direccion;
    private String instruccion;
    private String profeccion;
    private String ocupacion;
    private String seguro;
    private String discapacidad;
    @OneToMany(mappedBy = "paciente", cascade = CascadeType.ALL)
    private List<Reservacion> reservacion;
    @OneToMany(mappedBy = "paciente")
    private List<Consulta> consultas=new ArrayList<Consulta>();
    @OneToMany(mappedBy = "paciente")
    private List<Certificado> certificados;
    @OneToMany(mappedBy = "paciente")
    private List<RecetaOftalmologia> recetaOftalmologias;

    public Paciente() {
        cedula = "";
        reservacion = new ArrayList<Reservacion>();
    }

    public String getCedula() {
        return cedula;
    }

    public void setCedula(String cedula) {
        this.cedula = cedula;
    }

    public Date getFechaNace() {
        return fechaNace;
    }

    public void setFechaNace(Date fechaNace) {
        this.fechaNace = fechaNace;
    }

    public String getLugarNace() {
        return lugarNace;
    }

    public void setLugarNace(String lugarNace) {
        this.lugarNace = lugarNace;
    }

    public String getLugarResi() {
        return lugarResi;
    }

    public void setLugarResi(String lugarResi) {
        this.lugarResi = lugarResi;
    }

    public String getGenero() {
        return genero;
    }

    public void setGenero(String genero) {
        this.genero = genero;
    }

    public String gettSangre() {
        return tSangre;
    }

    public void settSangre(String tSangre) {
        this.tSangre = tSangre;
    }

    public String getRaza() {
        return raza;
    }

    public void setRaza(String raza) {
        this.raza = raza;
    }

    public String geteCivil() {
        return eCivil;
    }

    public void seteCivil(String eCivil) {
        this.eCivil = eCivil;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getInstruccion() {
        return instruccion;
    }

    public void setInstruccion(String instruccion) {
        this.instruccion = instruccion;
    }

    public String getProfeccion() {
        return profeccion;
    }

    public void setProfeccion(String profeccion) {
        this.profeccion = profeccion;
    }

    public String getOcupacion() {
        return ocupacion;
    }

    public void setOcupacion(String ocupacion) {
        this.ocupacion = ocupacion;
    }

    public String getSeguro() {
        return seguro;
    }

    public void setSeguro(String seguro) {
        this.seguro = seguro;
    }

    public String getDiscapacidad() {
        return discapacidad;
    }

    public void setDiscapacidad(String discapacidad) {
        this.discapacidad = discapacidad;
    }
    ///////////////////////////

//    public List<Reservacion> getReservaciones() {
//        if (reservacion == null) {
//            reservacion = new ArrayList<Reservacion>();
//        }
//        return reservacion;
//    }

//    public void setReservaciones(List<Reservacion> reservations) {
//        this.reservacion = reservations;
//    }

//    public List<Paciente> selectPacientes() throws Exception {
//        PacienteBD pbd = new PacienteBD();
//        List<Object> lsPct = pbd.listar("Paciente");
//        List<Paciente> esp = (List) lsPct;
//        return esp;
//    }

//    public Object selectPaciente(String idBuskeda) throws Exception {//reservaciones
//
//        PacienteBD pbd = new PacienteBD();
//        String cmdSql = "Select p From Paciente p Where p.cedula = :idBuskeda";
//        Object pct = pbd.selectPaciente(cmdSql, idBuskeda);
//        return pct;
//    }

//    public int actualizarPacienteReservacion(Paciente ep, Reservacion er) throws Exception {//asignar reservacion a paciente
//        PacienteBD pbd = new PacienteBD();
//        pbd.updatePacente(ep, er);
//        return 1;
//    }
    /*
     * public String numHistoria() { String numHC = ""; ResultSet rsp = null;
     * int nMax = 0;
     *
     * try { rsp = enlace.Consulta("Select Max(id) as Mx From paciente");
     *
     * if(rsp!=null && rsp.first()) { if(rsp.getString("Mx")==null) numHC = "HC"
     * + 1; else { nMax = Integer.parseInt(rsp.getString("Mx")); numHC = "HC" +
     * (nMax+1); } }else numHC = "rs-nulo";//borrar esta linea al final?
     * }catch(Exception ex) { ex.getCause(); } return numHC;
    }
     */
    ////////////////////////////////////prueba
//    public void addReservacion(Reservacion reservacion) {//prueba
//        if (reservacion == null) {
//            throw new IllegalArgumentException("Reservacion nula");
//        }
//        //if(reservacion.getPaciente() != null)
//        //reservacion.getPaciente().removeReservacion(reservacion);
//        reservacion.setPaciente(this);
//        Paciente p = new Paciente();
//        p = this.getReservaciones().get(0);//.add(reservacion);
//    }

    /**
     * @return the numeroHC
     */
    public String getNumeroHC() {
        return numeroHC;
    }

    /**
     * @param numeroHC the numeroHC to set
     */
    public void setNumeroHC(String numeroHC) {
        this.numeroHC = numeroHC;
    }

    /**
     * @return the consultas
     */
    public List<Consulta> getConsultas() {
        return consultas;
    }

    /**
     * @param consultas the consultas to set
     */
    public void setConsultas(List<Consulta> consultas) {
        this.consultas = consultas;
    }
    
    public String toString(){
        return getNombre()+" "+getApellido();
    }
}
